(function ($, pilote, undefined){

    /************************/
    /* VARIABLES DE L'OBJET */
    /************************/
    
    // Variable 'alias' permettant de ne pas tout le temps à avoir a réécrire le prototype
    var proto = pilote.util.createClass('Board.object').prototype;
    
    // Variable de gestion des composants du plateau
    proto.cards = null;
    proto.size = null;
    
    // Variable de gestion du template
    proto.template = null;
        
    /***************************/
    /* CONSTRUCTEUR DE L'OBJET */
    /***************************/
    /**
     * Constructeur de l'objet
     * @param object template : objet jquery permettant de spécifier le contexte de l'action de l'objet
     */
    proto.initialize = function (template) {
    	var self = this;
    	self.template = template;
    };  
    
    /*********************************/
    /* METHODES/FONCTIONS DE L'OBJET */
    /*********************************/
    
    /**
     * Méthode de mise en place des éléments de l'onglet
     * @param array listElement : liste contenant les objets à ajouter à l'onglet
     */
    proto.setData = function(listElement){
        var self = this;
        // Gestion de la taille du plateau
        self.size = Math.sqrt(listElement.length);
    	// Gestion de la liste des éléments
    	self.cards = listElement;
    }
	
	/**
     * Méthode de mise en place des éléments de l'onglet
	 * @param int id : identifiant du tableau contenant la carte
     * @param Card.object card : objet carte
	 * @return Bool
     */
	proto.setCard = function(id, card){
        // Variable
		var self = this,
			squareCard = self.cards[id];
		if (squareCard.name != 'default'){
			return false;
		}else{
			self.cards[id] = card;        
			return true;
		}
    }

    /**
     * Méthode d'affichage de l'objet
     */
    proto.show = function(){
    	var self = this
    		comp = 0
    		board = '<div class="line">';
    	// Parcours des cartes du plateau pour construction de l'affichage
    	for ( var indx = 0; indx < self.cards.length; indx++ ){
    		if (comp >= self.size){
    			board += '</div><div class="line">';
    			comp = 0;
    		}
    		if (self.cards[indx].name == 'default'){
    			board += '<div class="cell" name="%s" >%s</div>'.format(indx, self.cards[indx].toString());
    		}else{
    			board += '<div class="cell" name="%s" disabled="disabled">%s</div>'.format(indx, self.cards[indx].toString());
    		}
    		
    		comp += 1;
    	}
    	self.template.html(board + '</div>');
    }
    
    /**
     * Méthode permettant de cacher l'objet
     */
    proto.hide = function(){
    	var self = this;
    	self.template.html('');
    }
    
    /**
     * Méthode d remise à zéro de l'objet
     */
    proto.reset = function(){
    	var self = this;
    	self.cards = null;
    	self.size = null;
        
    }

})(window.jQuery, window.pilote);